}
#endif
+ /* Unsupportable for virtualised CPUs. */
+ clear_bit(X86_FEATURE_MWAIT & 31, &ecx);
}
regs->eax = (unsigned long) eax;
*/
void vmx_vmexit_do_hlt(void)
{
- raise_softirq(SCHEDULE_SOFTIRQ);
+ do_block();
}
static inline void vmx_vmexit_do_extint(struct cpu_user_regs *regs)
}
}
-volatile unsigned long do_mwait_count;
-static inline void vmx_vmexit_do_mwait(void)
-{
- raise_softirq(SCHEDULE_SOFTIRQ);
-}
-
#define BUF_SIZ 256
#define MAX_LINE 80
char print_buf[BUF_SIZ];
__update_guest_eip(inst_len);
break;
case EXIT_REASON_MWAIT_INSTRUCTION:
- __get_instruction_length(inst_len);
- __update_guest_eip(inst_len);
- vmx_vmexit_do_mwait();
+ __vmx_bug(®s);
break;
default:
__vmx_bug(®s); /* should not happen */
#include <xen/sched.h>
#include <asm/current.h>
#include <io_ports.h>
+#include <xen/event.h>
#ifdef CONFIG_VMX
/* Set the pending intr bit, and send evtchn notification to myself. */
if (test_and_set_bit(vpit->vector, vpit->intr_bitmap))
vpit->pending_intr_nr++; /* already set, then count the pending intr */
+ evtchn_set_pending(vpit->v, iopacket_port(vpit->v->domain));
/* pick up missed timer tick */
if ( missed_ticks > 0 ) {
}
vpit->intr_bitmap = intr;
+ vpit->v = d;
vpit->scheduled = NOW() + vpit->period;
set_ac_timer(&vpit->pit_timer, vpit->scheduled);
unsigned int count; /* the 16 bit channel count */
unsigned int init_val; /* the init value for the counter */
-
-} ;
+ struct vcpu *v;
+};
/* to hook the ioreq packet to get the PIT initializaiton info */
extern void vmx_hooks_assist(struct vcpu *d);